home *** CD-ROM | disk | FTP | other *** search
/ Developer Helper 1: Phil & Dave's Excellent CD / Excellent CD HFS.raw / Moof / Goodies / HyperCard Goodies / Serial Toolkit / Source Code / closeSPort.p < prev    next >
Text File  |  1988-11-18  |  2KB  |  98 lines

  1. (*
  2.     closeSPort -- Close the serial port driver, and release any buffer space associated with the input.
  3.  
  4.     To compile and link this file using Macintosh Programmer's Workshop,
  5.  
  6.         pascal -w closeSPort.p
  7.         link -m ENTRYPOINT -o HyperCommands -rt XCMD=7031 -sn Main=closeSPort ∂
  8.             closeSPort.p.o "{MPW}"Libraries:interface.o
  9.  
  10.     © Copyright 1987,88 by Apple Computer, Inc.
  11.  
  12.     Initial coding 9/87 by Harry R. Chesley.
  13. *)
  14.  
  15. {$R-}
  16.  
  17. {$S closeSPort }     { Segment name must be the same as the command name. }
  18.  
  19. unit DummyUnit;
  20.  
  21. interface
  22.  
  23. uses MemTypes, QuickDraw, OSIntf, HyperXCmd;
  24.  
  25. procedure EntryPoint(paramPtr: XCmdPtr);
  26.     
  27. implementation
  28.  
  29. type
  30.  
  31. Str31 = String[31];
  32.  
  33. procedure closeSPort(paramPtr: XCmdPtr); forward;
  34.  
  35. procedure EntryPoint(paramPtr: XCmdPtr);
  36.  
  37.     begin
  38.         closeSPort(paramPtr);
  39.     end;
  40.  
  41. procedure closeSPort(paramPtr: XCmdPtr);
  42.  
  43.     var i: integer;
  44.  
  45.     {$I XCmdGlue.inc}
  46.  
  47.     procedure Fail(errMsg: Str255); { set theResult and quit }
  48.         begin
  49.             paramPtr^.returnValue := PasToZero(errMsg);
  50.             exit(closeSPort);
  51.         end;
  52.  
  53.     {$I SPortUtil.inc}
  54.  
  55.     begin
  56.         if paramPtr^.paramCount <> 0 then Fail('parameter count is not 0');
  57.  
  58.         SetUpSPortGlobals;
  59.  
  60.         if not ThisSPort.isOpen then Fail('port is not open');
  61.  
  62.         { Wait for the output to drain. (If he didn't want to wait, he should have done a killSPort first.) }
  63.         WaitForAllFree;
  64.         { If there's an input buffer allocated, deallocate it. }
  65.         if ThisSPort.inputBuffer <> nil then
  66.             begin
  67.                 if SerSetBuf(ThisSPort.portInDev,nil,0) <> noErr then Fail('SerSetBuf failed');
  68.                 DisposPtr(ThisSPort.inputBuffer);
  69.             end;
  70.         { Dispose of all the output parmBlks. }
  71.         for i := 1 to MAXPARMBLKS do
  72.             begin
  73.                 if ThisSPort.parmBlks[i]^.ioBuffer <> nil then DisposPtr(ThisSPort.parmBlks[i]^.ioBuffer);
  74.                 DisposPtr(Ptr(ThisSPort.parmBlks[i]));
  75.             end;
  76.         { Reset everything to the default values and mark the port as closed. }
  77.         with Globals^^.ports[Globals^^.selectedPort] do
  78.             begin
  79.                 { Set the default byte format. }
  80.                 byteConfig := baud1200+stop10+noParity+data8;
  81.                 { Set the rest of the port defaults. }
  82.                 with shakes do
  83.                     begin
  84.                         fXOn := 0; fCTS := 0; errs := 0; evts := 0; fInX := 0;
  85.                     end;
  86.                 { Set no auto-linefeed, no echo, no edit, no strip top bits. }
  87.                 sendLFs := false;
  88.                 doEcho := false;
  89.                 doEdit := false;
  90.                 stripIncoming := true;
  91.                 autoWrap := false;
  92.                 currentColumn := 1;
  93.                 isOpen := false;
  94.             end;
  95.     end;
  96.  
  97. end.
  98.